<!DOCTYPE html>
<html>
<head>
<title>JSON-LD Requirements</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!-- 
  === NOTA BENE ===
  For the three scripts below, if your spec resides on dev.w3 you can check them
  out in the same tree and use relative links so that they'll work offline,
  -->
<script type="text/javascript"
  src="http://dev.w3.org/2009/dap/ReSpec.js/js/respec.js" class="remove">
 </script>
<script type="text/javascript" class="remove">

    var preProc = {
          apply:  function(c) {
                    // extend the bibliography entries

                    // process the document before anything else is done
                    var refs = document.querySelectorAll('adef') ;
                    for (var i = 0; i < refs.length; i++) {
                        var item = refs[i];
                        var p = item.parentNode ;
                        var con = item.innerHTML ;
                        var sp = document.createElement( 'dfn' ) ;
                        var tit = item.getAttribute('title') ;
                        if (!tit) {
                            tit = con;
                        }
                        sp.className = 'adef' ;
                        sp.title=tit ;
                        sp.innerHTML = con ;
                        p.replaceChild(sp, item) ;
                    }
                    refs = document.querySelectorAll('aref') ;
                    for (var i = 0; i < refs.length; i++) {
                        var item = refs[i];
                        var p = item.parentNode ;
                        var con = item.innerHTML ;
                        var sp = document.createElement( 'a' ) ;
                        sp.className = 'aref' ;
                        sp.setAttribute('title', con);
                        sp.innerHTML = '@'+con ;
                        p.replaceChild(sp, item) ;
                    }
                    // local datatype references
                    refs = document.querySelectorAll('ldtref') ;
                    for (var i = 0; i < refs.length; i++) {
                        var item = refs[i];
                        if (!item) continue ;
                        var p = item.parentNode ;
                        var con = item.innerHTML ;
                        var ref = item.getAttribute('title') ;
                        if (!ref) {
                            ref = item.textContent ;
                        }
                        if (ref) {
                            ref = ref.replace(/\n/g, '_') ;
                            ref = ref.replace(/\s+/g, '_') ;
                        }
                        var sp = document.createElement( 'a' ) ;
                        sp.className = 'datatype';
                        sp.title = ref ;
                        sp.innerHTML = con ;
                        p.replaceChild(sp, item) ;
                    }
                    // external datatype references
                    refs = document.querySelectorAll('dtref') ;
                    for (var i = 0; i < refs.length; i++) {
                        var item = refs[i];
                        if (!item) continue ;
                        var p = item.parentNode ;
                        var con = item.innerHTML ;
                        var ref = item.getAttribute('title') ;
                        if (!ref) {
                            ref = item.textContent ;
                        }
                        if (ref) {
                            ref = ref.replace(/\n/g, '_') ;
                            ref = ref.replace(/\s+/g, '_') ;
                        }
                        var sp = document.createElement( 'a' ) ;
                        sp.className = 'externalDFN';
                        sp.title = ref ;
                        sp.innerHTML = con ;
                        p.replaceChild(sp, item) ;
                    }
                    // now do terms
                    refs = document.querySelectorAll('tdef') ;
                    for (var i = 0; i < refs.length; i++) {
                        var item = refs[i];
                        if (!item) continue ;
                        var p = item.parentNode ;
                        var con = item.innerHTML ;
                        var ref = item.getAttribute('title') ;
                        if (!ref) {
                            ref = item.textContent ;
                        }
                        if (ref) {
                            ref = ref.replace(/\n/g, '_') ;
                            ref = ref.replace(/\s+/g, '_') ;
                        }
                        var sp = document.createElement( 'dfn' ) ;
                        sp.title = ref ;
                        sp.innerHTML = con ;
                        p.replaceChild(sp, item) ;
                    }
                    // now term references
                    refs = document.querySelectorAll('tref') ;
                    for (var i = 0; i < refs.length; i++) {
                        var item = refs[i];
                        if (!item) continue ;
                        var p = item.parentNode ;
                        var con = item.innerHTML ;
                        var ref = item.getAttribute('title') ;
                        if (!ref) {
                            ref = item.textContent ;
                        }
                        if (ref) {
                            ref = ref.replace(/\n/g, '_') ;
                            ref = ref.replace(/\s+/g, '_') ;
                        }

                        var sp = document.createElement( 'a' ) ;
                        var id = item.textContent ;
                        sp.className = 'tref' ;
                        sp.title = ref ;
                        sp.innerHTML = con ;
                        p.replaceChild(sp, item) ;
                    }
                }
        } ;


      var respecConfig = {
          // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
          specStatus:           "unofficial",
          publishDate:          "2011-07-13",
          
          // the specification's short name, as in http://www.w3.org/TR/short-name/
          shortName:            "json-ld",
          subtitle:             "A Context-based JSON Serialization for Linked Data",
          // if you wish the publication date to be other than today, set this
          // publishDate:  "2009-08-06",

          // if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
          // and its maturity status
          previousPublishDate:  "2011-07-03",
          previousMaturity:     "ED",
          previousDiffURI:      "http://json-ld.org/requirements/ED/20110703/index.html",
          diffTool:             "http://www.aptest.com/standards/htmldiff/htmldiff.pl",

          // if there a publicly available Editor's Draft, this is the link
          edDraftURI:           "http://json-ld.org/requirements/latest/",

          // if this is a LCWD, uncomment and set the end of its review period
          // lcEnd: "2009-08-05",

          // if you want to have extra CSS, append them to this list
          // it is recommended that the respec.css stylesheet be kept
          extraCSS:             [
              "http://dev.w3.org/2009/dap/ReSpec.js/css/respec.css"
          ],

          // editors, add as many as you like
          // only "name" is required
          editors:  [
              { name: "Gregg Kellogg", url: "http://greggkellogg.net/",
                company: "Kellogg Associates" },
          ],

          // authors, add as many as you like. 
          // This is optional, uncomment if you have authors as well as editors.
          // only "name" is required. Same format as editors.

          // name of the WG
          wg:           "Linked Data in JSON Interest Group",
          
          // URI of the public WG page
          wgURI:        "",
          
          // name (with the @w3c.org) of the public mailing to which comments are due
          wgPublicList: "",
          
          // URI of the patent status for this WG, for Rec-track documents
          // !!!! IMPORTANT !!!!
          // This is important for Rec-track documents, do not copy a patent URI from a random
          // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
          // Team Contact.
          wgPatentURI:  "",
          maxTocLevel: 3,
          preProcess: [ preProc ]
          //alternateFormats: [ {uri: "diff-20110507.html", label: "diff to previous version"} ],
      };
  </script>
<style>
.diff { font-weight:bold; color:#0a3; }
</style>
</head>

<body>
<section id="abstract">
<p>
  This document attempts to gather requirements for Linked Data in JSON (JSON-LD)
  in order to create an objective measure with which to evaluate the
  <cite><a href="/spec/latest/">JSON-LD Specification</a></cite>.
</p>
</section>

<section id='sotd'>
<p>This document is an experimental work in progress.</p>
<!-- <p>
This document has been reviewed by W3C Members, by software
developers, and by other W3C groups and interested parties, and is
endorsed by the Director as a W3C Recommendation. It is a stable
document and may be used as reference material or cited from another
document. W3C's role in making the Recommendation is to draw attention
to the specification and to promote its widespread deployment. This
enhances the functionality and interoperability of the Web.
</p> -->
</section>

<section>
<h1>Introduction</h1>
</section>

<section><h1>Definitions</h1>
  <dl>
    <dt><tdef>JSON</tdef></dt><dd>
      <abbr title="JavaScript Object Notation">JSON</abbr> (JavaScript Object Notation)
      [[!RFC4627]]
      is a simple way to express objects in a syntax compatible with JavaScript.
    </dd>
    <dt>Linked Data</dt><dd>
      According to <cite><a
      href="http://en.wikipedia.org/wiki/Linked_Data">Wikipedia</a></cite>, Linked Data ...
      <blockquote cite="http://en.wikipedia.org/wiki/Linked_Data">
        describes a method of publishing structured data so that it can be interlinked and
        become more useful. It builds upon standard Web technologies such as HTTP and URIs,
        but rather than using them to serve web pages for human readers, it extends them to
        share information in a way that can be read automatically by computers. This
        enables data from different sources to be connected and queried.
      </blockquote>
    </dd>
    <dt><tdef>JSON Object</tdef></dt><dd>
      From [[RFC4627]]: <blockquote>
        An object structure is represented as a pair of curly brackets surrounding zero or
        more name/value pairs (or members). A name is a string. A single colon comes after
        each name, separating the name from the value. A single comma separates a value
        from a following name. The names within an object SHOULD be unique.
      </blockquote>
    </dd>
  </dl>
</section>

<section><h1>Requirements</h1>
  <section><h2>Linked Data</h2>
    <p>
      The following are taken to be assertions about the meaning of <tref>Linked Data</tref>.
    </p>
    <p class="note">
      This section is intended to abstractly describe the concept of <tref>Linked
      Data</tref>. This does not necessarily relate concepts directly to a JSON syntactic
      expression; that is left for the following section.
    </p>
    <ol>
      <li><tdef>Linked Data</tdef> is a set of documents, each containing a representation of a linked data graph.</li>
      <li>A <tdef>linked data graph</tdef> is a labeled directed graph, where nodes are <tref>subject</tref>s or <tref>object</tref>s, and edges are properties.</li>
      <li>A <tdef>subject</tdef> is any node in a <tref>linked data graph</tref> with at least one outgoing edge.</li>
      <li>
        A <tref>subject</tref> MAY be labeled with a IRI.
        <p class="issue">
          There is some controversy over the use of MAY vs. SHOULD. Could a subject be labeled with a literal?
          Can nodes be unlabeled (i.e., like RDF Blank Nodes)?
        </p>
      </li>
      <li>A <tdef>property</tdef> is an edge of the <tref>linked data graph</tref>.</li>
      <li>A <tref>property</tref> SHOULD be labeled with an IRI.</li>
      <li>An <tdef>object</tdef> is a node in a <tref>linked data graph</tref> with at least one incoming edge.</li>
      <li>An <tref>object</tref> MAY be labeled with an IRI.</li>
      <li>An IRI that is a label in a <tref>linked data graph</tref> SHOULD be dereferencable to a <tref>Linked Data</tref> document describing the labeled <tref>subject</tref>, <tref>object</tref> or <tref>property</tref>.</li>
      <li>A <tdef>literal</tdef> is an <tref>object</tref> with a label that is not an IRI</li>
    </ol>
  </section>
  <section><h2>JSON-LD</h2>
    <p>The following are taken to be requirements for creating <tref>Linked Data</tref> using JSON.</p>
    <p class="issue">
      This section has not been discussed on a teleconference
    </p>
    <ol>
      <li>A JSON-LD document MUST be able to express a <tref>linked data graph</tref>.</li>
      <li>
        A JSON-LD document uses <trefs>JSON object</trefs>s, arrays, numbers, strings and
        other literal names to express semantic information.
      </li>
      <li>A <tref>subject</tref> is represented with a <tref>JSON object</tref>.</li>
      <li>There MUST be a way label a <tref>JSON object</tref> with an IRI.</li>
      <li>There MUST be a way to reference an un-labeled JSON object that does not have a direct child relationship.</li>
      <li>JSON name/value pairs are used to describe property-object relationships.</li>
      <li>There MUST be a way to associate a IRI with the name in a JSON name/value pair.</li>
      <li>JSON strings MAY represent literals.</li>
      <li>JSON strings MAY represent IRIs.</li>
      <li>There MUST be a way to determine if a JSON value represents a IRI.</li>
      <li>There SHOULD be a way to associate a datatype IRI with a literal JSON value.</li>
      <li>JSON booleans, numbers and other literal values represent specific datatyped literals.</li>
      <li>A JSON array MAY be used to associate multiple <tref>object</tref>s with a <tref>subject</tref> through a common <tref>property</tref>.</li>
      <li>A JSON array MUST NOT be used to imply an order to the component entities.</li>
    </ol>
  </section>
</section>

</body>
</html>

